package com.cskaoyan.javase.oop3._1interface._5extend;

/**
 * 方法的形参在方法调用传入实参时，不一定要求数据类型完全一致。
 *
 * 基本类型：对于基本数据类型的方法形参，存在自动类型提升。
 * 引用类型： 对于引用数据类型的方法传参，存在自动向上转型。
 *      1.形参如果写一个普通类：调用方法时需要传入的是该类的对象或者该类的子类对象
 *      2.形参如果写一个抽象类：调用方法时需要传入的是该抽象类的子类对象
 *      3.形参如果写一个接口：调用方法时需要传入的是该接口的子类对象
 *
 *
 *
 *
 * @since 15:42
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        test(new A());
        test(new IAImpl());
    }

    public static void test(BaseA a) {
    }
    public static void test(IA a) {
    }

    // 方法如果返回值类型是一个抽象类或者接口,那么就必须返回它们的子类对象
    public static IA test(){
        return new IAImpl();
    }


}
class IAImpl implements IA{}
class A extends BaseA {
}

abstract class BaseA {
}

interface IA {
}